// 一个简约的用于分页的装饰器 主要是提取请求中的分页参数
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
import { Request } from 'express';
import { PaginationOptions } from '../../types/book';

/* 关键API的具体解释：
createParamDecorator:NestJS提供的一个用于创建自定义参数装饰器的函数。它接收一个函数，返回一个真正的自定义参数装饰器

*/

export const PaginateOptions = createParamDecorator(
  (defaultLimit = 5, ctx: ExecutionContext): PaginationOptions => {
    const request = ctx.switchToHttp().getRequest<Request>();
    const {
      page = 1,
      limit = defaultLimit as number,
      keyword,
      sort,
      order,
    } = request.query;
    return {
      page: Number(page),
      limit: Math.min(Number(limit), 100), // 最大100条，防滥用
      keyword: keyword as string,
      sort: sort as string,
      order: (order as string)?.toUpperCase() === 'ASC' ? 'ASC' : 'DESC', // 默认DESC
    };
  }
);

// 测试
